package com.xhj.mybatis.builder;

import com.xhj.mybatis.mapping.ResultMap;
import com.xhj.mybatis.mapping.ResultMapping;

import java.util.*;

/**
 * ResultMapResolver
 *
 * @author XJks
 * @description 解析和创建 ResultMap 对象
 */
public class ResultMapResolver {
    /**
     * 辅助类，用于帮助构建 Mapper 相关对象
     */
    private final MapperBuilderAssistant assistant;

    /**
     * ResultMap 的唯一标识符
     */
    private final String id;

    /**
     * 结果映射对应的 Java 类型
     */
    private final Class<?> type;

    /**
     * 结果映射的字段列表
     */
    private final List<ResultMapping> resultMappings;

    /**
     * 是否自动映射未指定的列
     */
    private final Boolean autoMapping;

    /**
     * 构造方法，初始化 ResultMapResolver 的所有属性
     *
     * @param assistant      辅助构建 Mapper 的对象
     * @param id             ResultMap 的唯一标识
     * @param type           结果映射的 Java 类型
     * @param resultMappings 字段映射列表
     * @param autoMapping    是否自动映射
     */
    public ResultMapResolver(MapperBuilderAssistant assistant, String id, Class<?> type, List<ResultMapping> resultMappings, Boolean autoMapping) {
        this.assistant = assistant;
        this.id = id;
        this.type = type;
        this.resultMappings = resultMappings;
        this.autoMapping = autoMapping;
    }

    /**
     * 调用辅助类 assistant 的 addResultMap 方法，创建并返回一个 ResultMap 对象
     *
     * @return 创建好的 ResultMap
     */
    public ResultMap resolve() {
        return assistant.addResultMap(this.id, this.type, this.resultMappings, this.autoMapping);
    }

}
